/**
 * 统一响应格式接口
 */

export interface IResponse<T = any> {
  /**
   * 响应码
   * @example 200
   */
  code: number;
  
  /**
   * 响应消息
   * @example "success"
   */
  message: string;
  
  /**
   * 响应数据
   */
  data: T;
  
  /**
   * 时间戳
   */
  timestamp: string;
}

/**
 * 分页响应格式接口
 */
export interface IPaginationResponse<T> extends IResponse<T> {
  /**
   * 分页信息
   */
  pagination?: {
    /**
     * 当前页码
     */
    page: number;
    
    /**
     * 每页条数
     */
    limit: number;
    
    /**
     * 总条数
     */
    total: number;
  };
}

/**
 * 创建统一响应对象
 * @param data 响应数据
 * @param message 响应消息
 * @param code 响应码
 * @returns 统一响应对象
 */
export function createResponse<T>(
  data: T, 
  message = 'success', 
  code = 200
): IResponse<T> {
  return {
    code,
    message,
    data,
    timestamp: new Date().toISOString(),
  };
}

/**
 * 创建分页响应对象
 * @param data 响应数据
 * @param pagination 分页信息
 * @param message 响应消息
 * @param code 响应码
 * @returns 分页响应对象
 */
export function createPaginationResponse<T>(
  data: T,
  pagination: { page: number; limit: number; total: number },
  message = 'success',
  code = 200
): IPaginationResponse<T> {
  return {
    code,
    message,
    data,
    timestamp: new Date().toISOString(),
    pagination,
  };
}